import { app, shell, BrowserWindow, ipcMain, desktopCapturer, screen } from 'electron';
import { join } from 'path';
import { electronApp, optimizer, is } from '@electron-toolkit/utils';
import icon from '../../resources/icon.png?asset';
let mainWindow;
function createWindow(): void {
    console.log(
        'size:',
        screen.getPrimaryDisplay(),
        screen.getPrimaryDisplay().workAreaSize,
        screen.getAllDisplays(),
        screen.getCursorScreenPoint()
    );

    // Create the browser window.
    mainWindow = new BrowserWindow({
        width: 900,
        height: 670,
        show: false,
        autoHideMenuBar: true,
        ...(process.platform === 'linux' ? { icon } : {}),
        webPreferences: {
            preload: join(__dirname, '../preload/index.js'),
            sandbox: false
        }
    });

    mainWindow.on('ready-to-show', () => {
        mainWindow.show();
    });

    mainWindow.webContents.setWindowOpenHandler((details) => {
        shell.openExternal(details.url);
        return { action: 'deny' };
    });

    // HMR for renderer base on electron-vite cli.
    // Load the remote URL for development or the local html file for production.
    if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
        mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']);
    } else {
        mainWindow.loadFile(join(__dirname, '../renderer/index.html'));
    }
}
async function createWebrtcWindow() {
    // Create the browser window.
    // 创建浏览器窗口。
    const win2 = new BrowserWindow({
        width: 600,
        height: 600,
        minHeight: 300,
        minWidth: 300,
        webPreferences: {
            nodeIntegration: false,
            contextIsolation: true
        }
    });
    win2.loadURL('chrome://webrtc-internals');
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
    // Set app user model id for windows
    electronApp.setAppUserModelId('com.electron');

    // Default open or close DevTools by F12 in development
    // and ignore CommandOrControl + R in production.
    // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
    app.on('browser-window-created', (_, window) => {
        optimizer.watchWindowShortcuts(window);
    });

    // IPC test
    ipcMain.on('ping', () => console.log('pong'));

    createWindow();

    ipcMain.on('createWebrtcWindow', (event) => {
        createWebrtcWindow();
    });
    ipcMain.handle('navigatorShare', (event) => {
        return desktopCapturer.getSources({ types: ['screen', 'window'] });
    });
    ipcMain.handle('navigatorCurrentWindowShare', (e) => {
        console.log('id:', mainWindow.getMediaSourceId());
        return mainWindow.getMediaSourceId();
    });

    app.on('activate', function () {
        // On macOS it's common to re-create a window in the app when the
        // dock icon is clicked and there are no other windows open.
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
    });
});

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

// In this file you can include the rest of your app"s specific main process
// code. You can also put them in separate files and require them here.

